
package controller;

import java.sql.Date;
import java.util.List;
import org.hibernate.*;
import model.conexao.HibernateUtil;
import model.crudxml.Prontuario;
import model.crudxml.Prontuario;

public class ProntuarioCrudXML {
    
    public void salvar(Prontuario prontuario) {
        Session sessao = null;
        Transaction transacao = null;
        try {

            sessao = HibernateUtil.getSessionFactory().openSession();
            transacao = sessao.beginTransaction();
            sessao.save(prontuario);
            transacao.commit();

        } catch (HibernateException e) {
            System.out.println("Atenção, ocorreu um problema ao tentar inserir \n " + 
                    "um prontuario: \n"
                    + e.getMessage());

        } finally {
            try {
                sessao.close();
            } catch (Throwable e) {
                System.out.println("Erro ao fechar operação de inserção, Mensagem: "
                        + e.getMessage());
            }

        }


    }

    public void atualizar(Prontuario prontuario) {

        Session sessao = null;
        Transaction transacao = null;

        try {

            sessao = HibernateUtil.getSessionFactory().openSession();
            transacao = sessao.beginTransaction();
            sessao.update(prontuario);
            transacao.commit();

        } catch (HibernateException e) {
            System.out.println("Atenção, ocorreu um problema ao tentar atualizar um registro de prontuario: \n " + 
                    e.getMessage());
        } finally {
            try {
                sessao.close();
            } catch (Throwable e) {
                System.out.println(
                        "Erro ao fechar operação de atualização. Mensagem:" + e.getMessage());
            }

        }

    }

    public void excluir(Prontuario prontuario) {

        Session sessao = null;

        Transaction transacao = null;

        try {

            sessao = HibernateUtil.getSessionFactory().openSession();

            transacao = sessao.beginTransaction();

            sessao.delete(prontuario);

            transacao.commit();

        } catch (HibernateException e) {

            System.out.println("Atenção, ocorreu um problema ao tentar excluir um registro de prontuario: \n " + 
                    e.getMessage());

        } finally {

            try {

                sessao.close();

            } catch (Throwable e) {

                System.out.println("Erro ao fechar operação de exclusão. Mensagem: "
                        + e.getMessage());

            }

        }

    }
     
    public List<Prontuario> listar() {

        Session sessao = null;

        Transaction transacao = null;

        Query consulta = null;

        List<Prontuario> resultado = null;

        try {

            sessao = HibernateUtil.getSessionFactory().openSession();

            transacao = sessao.beginTransaction();

            consulta = sessao.createQuery("from Prontuario");

            resultado = consulta.list();

            transacao.commit();

            return resultado;

        } catch (HibernateException e) {

            System.out.println("Não foi possível selecionar prontuarios. Erro: "
                    + e.getMessage());

            throw new HibernateException(e);

        } finally {

            try {

                sessao.close();

            } catch (Throwable e) {

                System.out.println("Erro ao fechar operação de consulta. Mensagem: "
                        + e.getMessage());

            }

        }

    }
    
    public Prontuario buscarProntuario(int valor) {

        Prontuario prontuario = null;

        Session sessao = null;

        Transaction transacao = null;

        Query consulta = null;

        try {

            sessao = HibernateUtil.getSessionFactory().openSession();

            transacao = sessao.beginTransaction();

            consulta = sessao.createQuery("from Prontuario where codigo :parametro");

            consulta.setInteger("parametro", valor);

            prontuario = (Prontuario) consulta.uniqueResult();

            transacao.commit();

            return prontuario;

        } catch (HibernateException e) {

            System.out.println("Não foi possível buscar prontuario. Erro: "
                    + e.getMessage());

        } finally {

            try {

                sessao.close();

            } catch (Throwable e) {

                System.out.println("Erro ao fechar operação de buscar. Mensagem: "
                        + e.getMessage());

            }

        }

        return prontuario;

    }

 
}
